# -*- coding: utf-8 -*-
def d3w(d, gender="m"):
	if d < 20:
		return first19[d] if gender=="m" else first19_f[d]
	result = ""
	if d < 1000:
		pp = d % 100 / 10
		if pp == 1:
			result += hundreds[d / 100] + " и " + (first19[d % 100] if gender=="m" else first19_f[d % 100])
		else:
			result += hundreds[d / 100]
			if (d % 100 != d):
				result += " "
			if pp:
				if (d % 10 == 0):
					result += "и "
				result += (ones[pp] if gender=="m" else ones_f[pp]) + "десет "
			if (d % 10):
				result += "и " + (first19[d % 10] if gender=="m" else first19_f[d % 10])
		return result

def d2w(d, gender="m"):
	if d == 0:
		return "нула"
	n3 = []
	r1 = ""
	ns = str(int(d))
	for k in range(3, 33, 3):
		r = ns[-k:]
		q = len(ns) - k
		if q < -2:
			break
		else:
			if q >= 0:
				n3.append(int(r[:3]))
			elif q >= -1:
				n3.append(int(r[:2]))
			elif q >= -2:
				n3.append(int(r[:1]))
		r1 = r
	nw = ""
	prev = ""
	for i, x in enumerate(n3):
		w3 = d3w(x, gender=gender)
		if prev and  prev.find(" и ") < 0:
			nw = " и " + nw
		if x==1:
			if i > 0:
				nw = thousand[i] + nw
			else:
				nw = w3 + nw
		elif x>1:
			nw = w3 + " " + thousands[i] + nw
		prev = w3

	if nw.startswith("и "):
		nw = nw[2:]
	return nw


first19 = ["", "един", "двa", "три", "четири", "пет", "шест", "седем", "осем", "девет", "десет", "единадесет", "дванадесет", "тринадесет", "четиринадесет", "петнадесет", "шестнадесет", "седемнадесет", "осемнадесет", "деветнадесет"]

first19_f = ["", "една", "две", "три", "четири", "пет", "шест", "седем", "осем", "девет", "десет", "единадесет", "дванадесет", "тринадесет", "четиринадесет", "петнадесет", "шестнадесет", "седемнадесет", "осемнадесет", "деветнадесет"]

ones = ["", "един", "двa", "три", "четири", "пет", "шест", "седем", "осем", "девет"]

ones_f = ["", "еднa", "двe", "три", "четири", "пет", "шест", "седем", "осем", "девет"]

hundreds = ["", "сто", "двеста", "триста", "четиристотин", "петстотин", "шестстотин", "седемстотин", "осемстотин", "деветстотин"]

thousand = ["", "хиляда ", "милион ", "милиард ", "трилион ", "квадратлион ", "квинтилион ", "секстилион ", "септилион ", "октилион ", "нонилион ", "децилион ", "индецилион ", "дуодецилон ", "тридецилон ", "куадродецилион ", "сексдецилион ", "септдецелион ", "октодецелион ", "новемдецилион ", "вигинтилион "]

thousands = ["", "хиляди ", "милиона ", "милиарда ", "трилиона ", "квадратлиона ", "квинтилиона ", "секстилиона ", "септилиона ", "октилиона ", "нонилиона ", "децилиона ", "индецилиона ", "дуодецилона ", "тридецилона ", "куадродецилиона ", "сексдецилиона ", "септдецелиона ", "октодецелиона ", "новемдецилиона ", "вигинтилиона "]

if __name__ == '__main__':
	import random
	from decimal import Decimal
	r = random.randint(0, 9999)
	for r in range(0, 200000):
		print r
		print '"' + d2w(Decimal(r)) + '"'
